from django.contrib.auth.models import User
from django.db import models

# Create your models here.
from utils.modelsMixin import *


class Classification(ModelSetMixin):
    name = models.CharField(max_length=40, verbose_name="分类名")
    parent = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True)

    class Meta:
        verbose_name = "商品分类"
        # 复数形式 英文里面复数形式在单词的后面加s
        verbose_name_plural = verbose_name

    def __str__(self):
        return "%s.%s" % (self.id, self.name)


# 创建商品表
class Commodity(ModelSetMixin):
    # 商品发布状态
    STATUS_CHOICES = (
        (0, "未发布"),
        (1, "发布")
    )
    name = models.CharField(max_length=40, verbose_name='商品名')
    caption = models.CharField(max_length=140, verbose_name='副标题')
    brand = models.CharField(max_length=40, verbose_name='品牌', null=True, blank=True)
    # Decimal高精度计算，max_digits最大位数，decimal_places=小数位数
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='单价')
    stock = models.IntegerField(verbose_name='库存')
    pack = models.TextField(verbose_name='包装信息')
    serviceafter_sale = models.TextField(verbose_name='售后服务', null=True, blank=True)
    sales = models.IntegerField(verbose_name='销量', default=0)
    comments = models.IntegerField(verbose_name='评价数量', default=0)
    status = models.IntegerField(verbose_name='状态', default=0, choices=STATUS_CHOICES)
    detail = models.TextField(verbose_name='详情', null=True, blank=True)

    classification1 = models.ForeignKey(Classification, on_delete=models.PROTECT, verbose_name='一级分类',
                                        related_name='classification1')
    classification2 = models.ForeignKey(Classification, on_delete=models.PROTECT, verbose_name='二级分类',
                                        related_name='classification2')

    class Meta:
        ordering = ['-sales', '-comments', '-create_time']
        verbose_name = "商品"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name


# 商品图片的模型
class CommodityImg(models.Model):
    src = models.TextField(verbose_name="图片地址")
    priority = models.IntegerField(default=0, verbose_name="优先级")
    commodity = models.ForeignKey(Commodity, on_delete=models.CASCADE, verbose_name="商品")

    class Meta:
        ordering = ['-priority']
        verbose_name = "商品图"
        verbose_name_plural = verbose_name


# 创建购物车表
class ShoppingCart(DateTimeModelMixin):
    number = models.IntegerField(default=1, verbose_name='购买数量')
    commodity = models.ForeignKey(Commodity, on_delete=models.CASCADE, verbose_name="商品")
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")

    class Meta:
        ordering = ["-update_time"]
        verbose_name = "购物车"
        verbose_name_plural = verbose_name


# 创建订单表
class Order(DateTimeModelMixin):
    PAY_METHOD_CHOICES = (
        (1, "支付宝"),
        (2, "货到付款")
    )
    Status_CHOICES = (
        (1, "待支付"),
        (2, "待发货"),
        (3, "待收货"),
        (4, "待评价"),
        (5, "已完成"),
        (6, "已取消")
    )
    order_id = models.CharField(max_length=64, primary_key=True, verbose_name="订单号")
    total_count = models.IntegerField(default=1, verbose_name="商品数量")
    total_amount = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="商品总金额")
    pay_method = models.IntegerField(verbose_name="支付方式", default=1, choices=PAY_METHOD_CHOICES)
    status = models.IntegerField(verbose_name="订单状态", default=1, choices=Status_CHOICES)
    address = models.TextField(verbose_name="收货地址")
    user = models.ForeignKey(User, on_delete=models.PROTECT, verbose_name="用户")

    class Meta:
        ordering = ['-create_time']
        verbose_name = "订单表"
        verbose_name_plural = verbose_name


# 创建订单商品表
class OrderGoods(DateTimeModelMixin):
    number = models.IntegerField(default=1, verbose_name="商品数量")
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='单价')
    # comments = models.IntegerField(verbose_name='评价数量', null=True,blank=True)
    # score=models.IntegerField(verbose_name="评分",null=True,blank=True)
    order = models.ForeignKey(Order, verbose_name="订单", on_delete=models.CASCADE)
    commodity = models.ForeignKey(Commodity, verbose_name="商品", on_delete=models.SET_NULL, null=True, blank=True)

    class Meta:
        # 自定义表名
        db_table = 'order_goods'
        verbose_name = "订单商品"
        verbose_name_plural = verbose_name


class Payment(DateTimeModelMixin):
    trade_id = models.CharField(max_length=100, unique=True, verbose_name="支付宝交易号")
    order = models.ForeignKey(Order, on_delete=models.CASCADE, verbose_name="订单")

    class Meta:
        ordering = ["-create_time"]
        verbose_name = "支付信息"
        verbose_name_plural = verbose_name
